package cn.scs.component;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileWriter {
    File file;
    boolean existed;
    FileOutputStream out = null;

    // 初始化
    public FileWriter(String path) {
        file = new File(path);
        existed = file.exists();
        if (existed) {  // 存在直接获取 in 、 out
            System.out.println("Warning: Slave-Local File existed!");
        } else {
            try {
                file.createNewFile();   // 创建新文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    // 初始化附件项   add为开启追加写入
    public void initFile(boolean add) {
        try {
            out = new FileOutputStream(file, add);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 删除
    public boolean delete() {
        if (existed) {
            return file.delete();
        }
        return false;   // 否则删除失败
    }
    // 写入
    public void write(byte[] data, boolean add) {
        // out未开启 初始化开启流
        if (this.out == null) { openStream(add); }
        try {
            out.write(data);
            out.flush();    // 从缓冲区写入，否则data引用变化导致数据丢失
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void write(byte[] data) {
        write(data, false); // 不写默认add为 flase
    }
    // 获取out流
    public FileOutputStream getOut() {
        return out;
    }
    // 关闭流  (需要手动关闭)
    public void closeStream() {
        try {
            this.out.flush();   // 全部写入
            this.out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 开启流
    public void openStream(boolean add) {
        initFile(add);
    }
}
